package array;

/**
 * 1. 数组的插入、删除、按照下标随机访问操作
 * 2. 数组中的数据是 int 类型的
 *
 * @author wangkaiqi
 */
public class SimpleArray {
    // 定义整形数据 data 保存数据
    public int data[];
    //定义数组长度
    private int n;
    // 定义实际个数
    private int count;

    /**
     * <h2>构造方法，定义数组大小</h2>
     */
    public SimpleArray(int capacity) {
        data = new int[capacity];
        n = capacity;
        count = 0;
    }

    /**
     * <h2>根据索引，找到数组中的元素并返回</h2>
     */
    public int find(int index) {
        if (index < 0 || index >= count) {
            return -1;
        }
        return data[index];
    }

    /**
     * <h2>插入元素</h2>
     */
    public boolean insert(int index, int value) {
        if (count == n) {
            System.out.println("数组元素已满");
            return false;
        }
        if (index < 0 || index > count) { // 最多只能等于 count。
            System.out.println("index 位置不合法！");
            return false;
        }
        // 位置合法, 从 [index,count) 的元素，都要往后移动一位
        for (int i = count; i > index; i--) {
            data[i] = data[i - 1];
        }
        data[index] = value;
        count++;
        return true;
    }

    /**
     * <h2>根据索引，删除数组中的元素</h2>
     */
    public boolean delete(int index) {
        if (index < 0 || index >= count) {
            System.out.println(" index 位置不合法 ");
            return false;
        }
        // 将 [index+1,count) 位置的元素往前移动一位
        for (int i = index+1; i < count; i++) {
            data[i-1] = data[i];
        }
        count--;
        return true;
    }
    /**
     * <h2>打印所有元素</h2>
     */
    public void printAll() {
        for (int i = 0; i < count; i++) {
            System.out.print(data[i] + "  ");
        }
        System.out.println("  ");
    }

    public static void main(String[] args) {
        SimpleArray array = new SimpleArray(5);
        array.printAll();
        array.insert(0, 3);
        array.insert(0, 4);
        array.insert(1, 5);// 4,5,3
        array.insert(3, 9);// 4,5,3,9
        array.insert(3, 10);//4,5,3,10,9
        array.insert(3, 11);//4,5,3,11,10,9
        array.printAll();
    }

}
